home *** CD-ROM | disk | FTP | other *** search
- ; *** Written by Jean-François Fabre 1999-2000
-
- ; patches to the main file:
- ;
- ; 102800266B00FFEA13C0
- ; "" "" 4E75 "" "" (floppy check)
- ;
- ; 4E7A0801
- ; 70004E71 (VBR)
- ;
-
- include "syslibs.i"
- include "jst.i"
-
- HD_PARAMS "",0,0
-
- MEM_SIZE = $200000
-
- loader:
- move.l #$100000,D0
- JSRABS AllocExtMem
-
- ; don't care about success or failure of fastmem allocation
-
- Mac_printf "SlamTilt HD Loader V2.0"
- Mac_printf "Coded by Jean-François Fabre © 2000"
-
- JSRGEN GetAttnFlags
- btst #AFB_68020,D0
- beq AgaErr
-
- JSRGEN CheckAGA
- tst.l D0
- bne AgaErr
-
- JSRABS UseHarryOSEmu
-
- TESTFILE MAINFILE
- tst.l d0
- bne FileErr
-
- move.l #130000,D0
- JSRABS LoadSmallFiles
-
- moveq.l #0,D0
- move.l #CACRF_CopyBack,D1
- JSRABS Degrade
-
- GO_SUPERVISOR
- SAVE_OSDATA MEM_SIZE,#$5D
-
- ; dos library patch
-
- MOVE.L $4.W,A6 ;OPEN DOSLIB FOR USE (THE EMU
- MOVEQ.L #0,D0 ;PROVIDES THE FUNCTIONS)
- LEA DOSNAM(PC),A1
- JSRLIB OpenLibrary(A6)
- RELOC_MOVEL D0,DOSP
-
- ; Lock() function patch
-
- move.l DOSP(pc),A1
- move.l #_LVOLock,A0
- GETUSRADDR mylock
- JSRLIB SetFunction
- RELOC_MOVEL D0,OriginalLock
-
- ; RunCommand() patch to patch intro.bin
- ; file on the fly
- ; (avoids access faults)
-
- move.l DOSP(pc),A1
- move.l #_LVORunCommand,A0
- GETUSRADDR myruncommand
- JSRLIB SetFunction
- RELOC_MOVEL D0,OriginalRunCommand
-
- move.l DOSP(pc),A6
- LEA.L MAINFILE(PC),A0 ;LOAD MAIN GAME
- MOVE.L A0,D1
- JSRLIB LoadSeg
- ;NO NEED TO STORE POINTER FOR LATER USE
- LSL.L #2,D0
- MOVE.L D0,A1
- ADDQ.L #4,A1
-
- cmp.l #0,A1
- beq LoadsegErr
-
- lea linefeed(pc),A0
- MOVEQ.L #1,D0 ; no pointer on argumentline
-
- bsr PatchExe
-
- jsr (A1)
-
- ; end of program
-
- LoadsegErr
- JSRGEN InGameExit
- bra.b LoadsegErr
-
- PatchExe:
- STORE_REGS
- move.l A1,A3
-
- move.l A3,A0
- move.l A0,A1
- add.l #150000,A1
- lea .floppycheck(pc),A2
- move.l #10,D0
- JSRGEN HexSearch
- cmp.l #0,A0
- beq.b .next
- PATCH_RTS (4,A0)
- .next
- move.l A3,A0
- move.l A0,A1
- add.l #150000,A1
- lea .vbrshit(pc),A2
- move.l #4,D0
- JSRGEN HexSearch
- cmp.l #0,A0
- beq.b .next2
- move.l #$70004E71,(A0)
- .next2
- move.l A3,A0
- move.l A0,A1
- add.l #150000,A1
- lea .stcdecrunch(pc),A2
- move.l #8,D0
- JSRGEN HexSearch
- cmp.l #0,A0
- beq.b .next3
- PATCHUSRJSR (A0),StartSTC
- PATCH_NOP (6,A0)
- .next3
-
- JSRGEN FlushCachesHard
- RESTORE_REGS
- rts
-
- .stcdecrunch:
- dc.l $50492A48,$D1D9D3D1
-
- .vbrshit:
- dc.l $4E7A0801
- .floppycheck:
- dc.l $10280026,$6B00FFEA
- dc.w $13C0
-
- FileErr:
- Mac_printf "File ",f
- lea MAINFILE(pc),A1
- JSRABS Display
- Mac_printf " missing!"
- JSRABS CloseAll
-
- myruncommand:
- STORE_REGS
- LSL.L #2,D1
- MOVE.L D1,A1
- ADDQ.L #4,A1
-
- move.l A1,A0
- add.l #28700,A1
- lea .intropatch(pc),A2
- moveq.l #6,D0
- JSRGEN HexSearch
- cmp.l #0,A0
- beq.b .exit
-
- move.w #$6002,(4,A0)
- JSRGEN FlushCachesHard
- .exit
- RESTORE_REGS
-
- move.l OriginalRunCommand(pc),-(A7)
- RTS ; executes the program
-
- .intropatch:
- dc.w $1001
- dc.l $484116F4
-
- mylock:
- lea dfxname(pc),A0
- move.b #'0',(2,A0)
- .loop
- move.l A0,D0
- JSRGEN StrcmpAsm
- tst.l D0
- beq.b .dfx
- add.b #1,(2,A0)
- cmp.b #'4',(2,A0)
- bne.b .loop
-
- lea hdname(pc),A0
- move.l A0,D0
- JSRGEN StrcmpAsm
- tst.l D0
- beq.b .hd
-
- .orglock
- move.l OriginalLock(pc),-(A7)
- rts
-
- .hd:
- moveq.l #1,D0 ; success: filesize is 0, but WHDLoad interface does not support it!!
- rts
-
- .dfx:
- moveq.l #0,D0 ; failure
- rts
-
- ; start of StoneCracker decruncher
- ; we call the decrunching code, and then try to patch it
- ; (horror level has got some access faults)
-
- StartSTC:
- ; gets return address
-
- move.l (A7)+,A5
- pea .after_decrunch(pc)
- move.l A5,-(A7)
-
- ; start of STC code
-
- addq.w #8,A1
-
- RELOC_MOVEL (A1),.decrunched_len
-
- move.l A0,A5
- add.l (A1)+,A0
- add.l (A1),A1
-
- rts
- .after_decrunch
- STORE_REGS
- move.l .decrunched_len(pc),D1
- cmp.l #$A89D4,D1
- bne.b .notlev4
-
- ; we recognized "demon.bin" file
-
- add.l #$A0000,A0
- move.l A0,A1
- add.l #$8000,A1
- lea .moveff(pc),A2
- move.l #12,D0
- JSRGEN HexSearch
- cmp.l #0,A0
- beq.b .notlev4
- PATCHUSRJSR (A0),MoveFFA1
- move.w #$601C,(6,A0)
- JSRGEN FlushCachesHard
- .notlev4
- RESTORE_REGS
- rts
-
- .decrunched_len:
- dc.l 0
- .moveff:
- dc.w $12F9
- dc.l -1
- dc.w $12F9
- dc.l -1
-
- ; replaces original buggy code: move.b ($FFFFFFFF),(A1)+ -> access fault
-
- MoveFFA1:
- move.b #$FF,(A1)+
- move.b #$FF,(A1)+
- move.b #$FF,(A1)+
- move.b #$FF,(A1)+
- move.b #$FF,(A1)+
- move.b #$FF,(A1)+
- rts
-
- AgaErr:
- Mac_printf "** You need a A1200/A4000 to run SlamTilt!"
- JMPABS CloseAll
-
- OriginalLock:
- dc.l 0
- OriginalRunCommand:
- dc.l 0
- DOSP:
- dc.l 0
- DOSNAM:
- dc.b "dos.library",0
- linefeed:
- dc.b 10
- even
- hdname:
- dc.b "PROGDIR:HD",0
- volname:
- dc.b "Slam1:",0
- dfxname:
- dc.b "dfx:",0
- MAINFILE:
- dc.b "game.exe",0
-
-
-
-